// 导入路由对象
const express = require("express")
const router = express.Router()//创建路由
// 导入控制器类
const OperationLog = require("../controllers/operationLogController")
const operationLogObj = new OperationLog()
const Jwt = require("../common/jwt")

// 获取操作日志列表
// 请求地址：http://localhost:3001/api/operationLog/items
// 参数：page_num, page_size, token (可通过headers提交)
// 权限：普通用户只能查看自己的操作日志，管理员可查看所有操作日志
router.post("/items", async (req, res) => {
  let { page_num, page_size } = req.body
  let token = req.headers.token || req.body.token;

  if (page_num == undefined || page_size == undefined) {
    res.status(404).json({ code: -1, msg: "缺少参数" })
  } else if (token == undefined) {
    res.status(404).json({ code: -1, msg: "缺少token" })
  } else {
    // 校验token 判断用户是否登录
    let jwtResult = new Jwt(token).verifyToken();
    if (jwtResult.code == 200) {
      const userId = jwtResult.info.data;
      const db = require("../common/db/index");

      try {
        // 查询用户角色
        const sql = 'SELECT role FROM pre_user WHERE id = ?';
        const userResult = await db.query(sql, [userId]);

        if (userResult.length == 0) {
          res.status(404).json({ code: -1, msg: "用户不存在" });
          return;
        }

        const userRole = userResult[0].role;
        // 如果是管理员（role='1'），可以查看所有日志；否则只能查看自己的日志
        const admin_id = userRole == '1' ? null : userId;

        await operationLogObj.items(page_num, page_size, admin_id)
          .then(
            result => {
              res.status(200).json(result);
            },
            err => {
              res.status(500).json(err)
            }
          )
      } catch (error) {
        res.status(500).json({ code: -1, msg: "获取操作日志失败", error: error.message })
      }
    } else {
      res.status(401).json({ code: -1, msg: "您尚未登录" })
    }
  }
})

// 删除操作日志
// 请求地址：http://localhost:3001/api/operationLog/delete
// 参数：id, token (可通过headers提交)
router.post("/delete", async (req, res) => {
  let { id } = req.body
  let token = req.headers.token || req.body.token;

  if (id == undefined || token == undefined) {
    res.status(404).json({ code: -1, msg: "缺少参数" })
  } else {
    // 校验token 判断管理员是否登录
    let result = new Jwt(token).verifyToken();
    if (result.code == 200) {
      await operationLogObj.remove(id)
        .then(
          result => {
            res.status(200).json(result);
          },
          err => {
            res.status(500).json(err)
          }
        )
    } else {
      res.status(401).json({ code: -1, msg: "您尚未登录" })
    }
  }
})

// 暴露操作日志路由
module.exports = router;

